home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
libs
/
intuisup.lha
/
Intuisup
/
source.lha
/
Editor
/
fonts.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-10-02
|
4KB
|
187 lines
/* $Revision Header *** Header built automatically - do not edit! ***********
*
* (C) Copyright 1991 by Torsten Jürgeleit
*
* Name .....: fonts.c
* Created ..: Tuesday 31-Dec-91 14:29:10
* Revision .: 1
*
* Date Author Comment
* ========= ==================== ====================
* 07-Jan-92 Torsten Jürgeleit update to new ISUP font routines
* 31-Dec-91 Torsten Jürgeleit Created this file!
*
****************************************************************************
*
* Font support routines
*
* $Revision Header ********************************************************/
/* Includes */
#include "includes.h"
#include "defines.h"
#include "imports.h"
#include "protos.h"
/* Open template font with given attributes */
struct TextAttr *
open_template_font_by_attributes(struct TemplateList *tl, BYTE * name,
USHORT ysize)
{
struct TextAttr search_ta, *avail_ta, *ta = NULL;
/* Try to open given font */
search_ta.ta_Name = (STRPTR) name;
search_ta.ta_YSize = ysize;
search_ta.ta_Style = FS_NORMAL;
search_ta.ta_Flags = FPF_ROMFONT;
if (avail_ta = IAskFont(pri, &search_ta))
{
struct TemplateFont *tf;
/* Search given template font in font list */
ysize = avail_ta->ta_YSize;
for (tf = get_head((struct List *) & tl->tl_Fonts); tf;
tf = get_succ((struct Node *) & tf->tf_MinNode))
{
if (!strcmp(name, (BYTE *) tf->tf_TextAttr.ta_Name) &&
ysize == tf->tf_TextAttr.ta_YSize)
{
tf->tf_UseCount++;
ta = &tf->tf_TextAttr;
break;
}
}
if (!ta)
{
/* Create new template font */
if (tf = AllocMem((LONG) sizeof(struct TemplateFont),
(LONG) MEMF_PUBLIC))
{
if (duplicate_string(name, (BYTE **) & tf->tf_TextAttr.ta_Name) !=
EDITOR_STATUS_NORMAL)
{
FreeMem(tf, (LONG) sizeof(struct TemplateFont));
}
else
{
/* Init template font and add it to font list */
ta = &tf->tf_TextAttr;
ta->ta_YSize = avail_ta->ta_YSize;
ta->ta_Style = avail_ta->ta_Style;
ta->ta_Flags = avail_ta->ta_Flags;
tf->tf_UseCount = 1;
AddTail((struct List *) & tl->tl_Fonts,
(struct Node *) & tf->tf_MinNode);
}
}
}
}
return (ta);
}
/* Open template font with given number */
struct TextAttr *
open_template_font_by_num(struct TemplateList *tl, USHORT num)
{
struct TemplateFont *tf;
struct TextAttr *ta;
/* Search given template font in font list */
if (!(tf = get_node((struct List *) & tl->tl_Fonts, num)))
{
ta = NULL;
}
else
{
tf->tf_UseCount++;
ta = &tf->tf_TextAttr;
}
return (ta);
}
/* Get number of template font from font list */
USHORT
get_template_font_num(struct TemplateList * tl, struct TextAttr * ta)
{
struct TemplateFont *tf;
USHORT num = 0;
/* Search given template font in font list */
for (tf = get_head((struct List *) & tl->tl_Fonts); tf;
tf = get_succ((struct Node *) & tf->tf_MinNode))
{
if (ta == &tf->tf_TextAttr)
{
break;
}
else
{
num++;
}
}
return (num);
}
/* Close template font with given attributes */
VOID
close_template_font(struct TemplateList * tl, struct TextAttr * ta)
{
if (ta)
{
struct TemplateFont *tf;
/* Search given template font in font list */
for (tf = get_head((struct List *) & tl->tl_Fonts); tf;
tf = get_succ((struct Node *) & tf->tf_MinNode))
{
if (ta == &tf->tf_TextAttr)
{
/* Close font and check if its in use yet */
if (!--tf->tf_UseCount)
{
/* Remove and free template font from font list */
Remove((struct Node *) & tf->tf_MinNode);
free_template_font(tf);
}
break;
}
}
}
}
/* Free template font list */
VOID
free_font_list(struct TemplateList *tl)
{
struct TemplateFont *tf;
struct List *list = (struct List *) & tl->tl_Fonts;
while (tf = (struct TemplateFont *) RemHead(list))
{
free_template_font(tf);
}
}
/* Free template font */
VOID
free_template_font(struct TemplateFont *tf)
{
if (tf)
{
free(tf->tf_TextAttr.ta_Name);
FreeMem(tf, (LONG) sizeof(struct TemplateFont));
}
}